package com.example.blog_system_ssm.component;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;
import java.util.UUID;

// 验证码工具类

@Component
public class CheckCodeTools {
    @Value("${verificationCodeImagePath}")
    private String verificationCodeImagePath;

    // 生成验证码，获取图片名称和验证码
    public String[] createImage() {
        // 定义图片名称
        String imageName = UUID.randomUUID().toString() + ".png";
        // 定义图形验证码的长和宽
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(110, 40);
        // 写出图形验证码，可以写出到文件，也可以写出到流
        lineCaptcha.write(verificationCodeImagePath + imageName);
        // 得到验证码
        String code = lineCaptcha.getCode();
        String[] result = new String[]{imageName, code};
        return result;
    }



    // 创建一个定时器，定期堆验证码图片进行删除操作
    {
        TimerTask task = new TimerTask() {
            @Override
            public void run() {
                // 设置开始删除标识
                System.out.println("清除验证码图片任务开始执行！当前时间：" + Calendar.getInstance().getTime());
                Long start = System.currentTimeMillis();
                // 验证码图片保存路径
                String path = "/root/project/verificationCodeImage";
                File dir = new File(path);
                if(!dir.exists()){
                    dir.mkdirs();
                }
                File[] fileList = dir.listFiles();
                // 遍历验证码图片列表,逐一删除验证码图片
                for (File file: fileList) {
                    file.delete();
                    System.out.println("成功删除文件：" + file.getAbsolutePath());
                }
                long end = System.currentTimeMillis();
                System.out.println("验证码图片清除任务执行结束！执行时间：" + (end-start) + "ms");
            }
        };

        //设置清理时间
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 10);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        Timer timer = new Timer();
        // 实际：设置定时任务,每隔两个小时清理一次
        timer.schedule(task, calendar.getTime(),2 * 60 * 60 * 1000);

        // 测试：设置定时任务,每隔一分钟清理一次
        // timer.schedule(task, calendar.getTime(),60 * 1000);
    }

    // 测试代码
//    {
//        String path = "D:\\pictureStorage\\verificationCodeImage";
//        File file = new File(path);
//        System.out.println("=================================");
//        System.out.println(file.getAbsolutePath());
//        File[] fileList = file.listFiles();
//        for (File f: fileList) {
//            f.delete();
//            System.out.println("成功删除文件：" + f.getAbsolutePath());
//        }
//        System.out.println("=================================");
//    }
}
